package pe.com.drokasa.android.client.service.impl;

import java.util.ArrayList;
import java.util.List;

import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;

import pe.com.drokasa.android.client.excepcion.ExcepcionInesperada;
import pe.com.drokasa.android.client.model.Sucursal;
import pe.com.drokasa.android.client.service.StockService;
import pe.com.drokasa.android.client.util.VariableAplicacion;

/**
 * Implementaci&oacute;n que obtiene el stock de productos por sucursal, 
 * a trav&eacute;s del servicio REST de stock.
 * 
 * @author Synopsis S.A
 *
 */
public class StockServiceREST implements StockService 
{	
	/**
	 * TIMEOUT del servicio rest
	 */
	private static final int TIME_OUT_SERVICIO_REST = 5000;
	
	/**
	 * URL del servicio rest
	 */
	private static final String URL_SERVICIO_REST = "http://192.168.210.169:9080/drokasaService/stockService";
	
	private static final String OPERACION_STOCK_POR_PRODUCTO = "/stockPorProducto/";
	
	private static final String SEPARADOR_PARAMETROS = "/";
	
	private RestTemplate template;
	
	/**
	 * 
	 */
	public StockServiceREST()
	{
		this.template = new RestTemplate(true);
		((SimpleClientHttpRequestFactory) template.getRequestFactory()).setConnectTimeout(TIME_OUT_SERVICIO_REST);
	}
	
	/**
	 * @see pe.com.drokasa.android.client.service.StockService#obtenerStockProducto(java.lang.String)
	 */
	@Override
	public List<Sucursal> obtenerStockProducto(String codigoProducto) throws ExcepcionInesperada
	{	
		List<Sucursal> sucursales = new ArrayList<Sucursal>();
		
		final String _url = URL_SERVICIO_REST + OPERACION_STOCK_POR_PRODUCTO + VariableAplicacion.getCodigoVendedor() + SEPARADOR_PARAMETROS + codigoProducto;
		try 
		{
			Sucursal[] results = template.getForObject(_url, Sucursal[].class);
			
			for (int i = 0; i < results.length; i++) 
			{
				sucursales.add((Sucursal) results[i]);
			}			
		} 
		catch (Exception e) 
		{
			throw new ExcepcionInesperada("Ocurrio un error al comunicarse con el servicio web.", e);
		}
		return sucursales;
	}
}